package com.es.designmode.visitor;

/**
 * 访问者模式
 * 表示一个作用于某对象结构中的各元素的操作
 * 它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作
 * <p>
 * 适用于数据结构相对稳定的系统
 * 把数据结构和作用于结构之上的操作之间的耦合解脱开，使得操作集合可以相对自由的演化
 * 缺点是使增加新的数据结构变得困难了
 *
 * @author Will
 */
public class ClientSide {

    public static void main(String[] args) {

        ObjectStructure o = new ObjectStructure();
        o.attach(new ConcreteElementA());
        o.attach(new ConcreteElementB());

        ConcreteVisitor1 v1 = new ConcreteVisitor1();
        ConcreteVisitor2 v2 = new ConcreteVisitor2();

        o.accept(v1);
        o.accept(v2);
    }
}
